package programa;


import controlador.ControladorTanque;
import vista.VentanaPrincipal;
import vista.VistaBalaCohete;
import vista.VistaParedDeConcreto;
import vista.VistaParedDeMetal;
import vista.VistaTanqueAlgotank;
import vista.VistaTanqueGbt;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.KeyPressedObservador;
import ar.uba.fi.algo3.titiritero.vista.Ventana;
import modeloArmamentista.BalaDeLanzaCohetes;
import modeloEntidades.Flota;
import modeloEntidades.Mapa;
import modeloEntidades.Pared;
import modeloEntidades.ParedDeConcreto;
import modeloEntidades.ParedDeMetal;
import modeloEntidades.Tanque;
import modeloEntidades.TanqueAlgotank;
import modeloEntidades.TanqueEnemigo;
import modeloEntidades.TanqueGBT;
import modeloFisico.ModeloFisico;
import modeloFisico.Punto;


public class Principal {

		public static void main(String[] args) {

			/*
			 * Luego instancio los objetos del framework: una ventana y el
			 * controlador
			 */

			ControladorJuego controlador = new ControladorJuego(false);
			VentanaPrincipal ventana = new VentanaPrincipal(controlador);
			controlador.setSuperficieDeDibujo(ventana.getSuperficieDeDibujo());
			ventana.setVisible(true);

			/*
			 * Primero instancio mi modelo: un tanque que se mueve por el mapa
			 */
			Mapa mapa = new Mapa(controlador);
			
		
			TanqueAlgotank tanqueAlgotank = new TanqueAlgotank();
			tanqueAlgotank.posicionar(new Punto(250, 250));
			
			TanqueEnemigo tanqueGbt1 = new TanqueGBT();
			tanqueGbt1.posicionar(new Punto(10, 300));
			
			TanqueEnemigo tanqueGbt2 = new TanqueGBT();
			tanqueGbt2.posicionar(new Punto(10, 300));
			
			ParedDeMetal pared = new ParedDeMetal();
			pared.posicionar(new Punto(50, 50));
			
			Flota flota = new Flota();
			flota.agregarTanque(tanqueGbt1);
			flota.agregarTanque(tanqueGbt2);

			
			mapa.agregarAlgotank(tanqueAlgotank);
			mapa.agregarFlota(flota);
			mapa.agregarPared(pared);
			
			
			BalaDeLanzaCohetes bala1 = new BalaDeLanzaCohetes(180, new Punto(360, 360), 'A');
			
			mapa.agregarBala(bala1);
			/*
			 * Instancio un cuadrado para que actue como vista del mapa
			 */

			
			VistaTanqueAlgotank vistaAlgotank = new VistaTanqueAlgotank(tanqueAlgotank);
			controlador.agregarDibujable(vistaAlgotank);
			
			VistaTanqueGbt vistaGbt1 = new VistaTanqueGbt(tanqueGbt1);
			controlador.agregarDibujable(vistaGbt1);
			
			VistaTanqueGbt vistaGbt2 = new VistaTanqueGbt(tanqueGbt2);
			controlador.agregarDibujable(vistaGbt2);
			
			VistaParedDeMetal vistaMetal = new VistaParedDeMetal(pared);
			controlador.agregarDibujable(vistaMetal);
			
			
			VistaBalaCohete vistaBala1 = new VistaBalaCohete(bala1);
			controlador.agregarDibujable(vistaBala1);
			
			
			controlador.agregarObjetoVivo(tanqueAlgotank);
			controlador.agregarObjetoVivo(tanqueGbt1);
			controlador.agregarObjetoVivo(tanqueGbt2);
			controlador.agregarObjetoVivo(bala1);
			

			/*
			 * agrego la pelota a la lista de objetos vivios del controlador para
			 * que este le de vida dentro del gameloop
			 */

			

			/*
			 * Agrego los objetos que actuan como vista a la lista de dibujables del
			 * controlador para que sean repintados al final de cada gameloop
			 */

			
			
		
			/*
			 * finalmente establezco el intervalo de sleep dentro del gameloop y
			 * comienzo a ejecutar
			 */
			
			KeyPressedObservador observador = new ControladorTanque(tanqueAlgotank);
			// Agrego observador de teclado
			controlador.agregarKeyPressObservador(observador);
			
			
			
			
			controlador.setIntervaloSimulacion(20);
			controlador.comenzarJuego();
		}

	


}
